[C] Variable argument의 사용 예

[ CnUnix ] in KIDS 글 쓴 이(By): outsider (하얀까마귀) 날 짜 (Date): 2001년 1월 9일 화요일 오후 10시 41분 52초 제 목(Title): 인수 여러개… printf처럼 함수의 인수의 갯수를 임의로 할 수 있는 함수를 만들고 싶다면 어떻게 해야 하나요? 인수의 타입은 뭐 반복 부분에서는 한가지라고 해두지요. [ CnUnix ] in KIDS 글 쓴 이(By): testors (테스토스) 날 짜 (Date): 2001년 1월 9일 화요일 오후 11시 23분 00초 제 목(Title): Re: 인수 여러개… 첫 인자는 꼭 있어야 합니다. 아래는 printf를 구현한 예제 입니다.. 자세한건 va 시리즈 함수군들 man 때려보시면 나옵니다. #include void function(int a, …) { va_list argptr; char str[1024]; va_start (argptr, fmt); vsprintf (str, fmt, argptr); write (1, str, strlen (str)); va_end (argptr); } – Testors [ CnUnix ] in KIDS 글 쓴 이(By): terzeron (the cowboy) 날 짜 (Date): 2001년 1월 10일 수요일 오후 12시 58분 43초 제 목(Title): Re: 인수 여러개… 시스템마다 조금씩 다른 것 같은데, testors님께서 말씀하신대로 va_*함수들을 사용하셔야 합니다. 구체적인 선언과 사용에 있어서 시스템을 좀 타는 것 같더군요. 일례로, elm(요즘은 잘 안 쓰지만)을 컴파일하다보면 그게 자꾸 말썽을 일으키더라구요. 매뉴얼도 각각 다르게 나오죠. man va_start와 man stdarg는 variable argument를 다른 방식으로 선언한다는 것을 보여줍니다. 실제 코드(from elm/src/curses.c)를 참조해보면 다음과 같습니다. #ifdef I_STDARG # include #else # include #endif … #ifdef I_STDARG Write_to_screen(char *line, int argcount, …) { char *arg1, *arg2, *arg3; va_list vl; va_start(vl, argcount); #else Write_to_screen(line, argcount, va_alist) char *line; int argcount; va_dcl { char *arg1, *arg2, *arg3; va_list vl; va_start(vl); #endif 도움이 되었으면 좋겠네요.